JWT(JSON Web Token)
JWT(JSON Web Token)是一种开放标准(RFC 7519)的基于Token的轻量级认证机制。它的核心思想是将用户身份认证信息通过JSON对象的形式加密为一个很长的字符串,作为访问资源的凭证Token,便于服务器和客户端传递。
JWT的工作机制主要包括以下几个部分:
- JWT的结构
JWT本质上是一个很长的编码后的字符串,由三部分用"."连接构成,格式如下:
Header.Payload.Signature
- Header: 头部,通常包含Token的类型和所使用的哈希加密算法
- Payload: 负载,存储有效信息,如用户id、角色权限等标准声明和自定义声明
- Signature: 签名,由Header、Payload和密钥通过加密算法计算得出,用于验证Token完整性
- JWT的生成
通常由服务器端在用户登录后生成JWT,具体流程如下:
- 根据声明规范构建Header和Payload JSON对象
- 将Header和Payload分别进行Base64编码
- 使用指定算法(如HMAC SHA256、RSA)加上服务端秘钥,对前两部分进行签名
- 将三部分用"."拼接为完整的JWT字符串
- JWT的传递
客户端在请求时将JWT字符串通过HTTP头部Authorization字段或URL参数传递给服务器。
- JWT的验证
服务端收到JWT后,首先要进行合法性验证:
- 从Token中解码并验证Header和Payload是否合法
- 使用相同的算法和密钥重新签名,比对Signature是否一致
- 检查是否在有效期内,是否被系统撤销等其他校验
- JWT的优缺点
优点:
-
简洁高效,可直接在web server进行验证,无需查询数据库
-
基于无状态的设计,服务端不需保存会话信息
-
可横向扩展,适合分布式微服务架构
-
Token一旦签发就无法主动作废,通常需设置有效期
-
Payload不建议存储敏感数据,因为可被解码
-
服务端需存储当前签名密钥和加密算法
JWT同时结合了传统会话方案和传统Token认证方案的优点,是当前广泛应用的轻量级分布式认证解决方案。